home *** CD-ROM | disk | FTP | other *** search
/ Enter 2006 September / Enter 09 2006.iso / Internet / SpamExperts Home 1.1 / SpamExperts Home.exe / lib / spamexperts.modules / spamexperts / addressclassifier.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-07-14  |  4.2 KB  |  112 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. '''addressclassifier.py - Core SpamExpert classes.
  5.  
  6. Classes:
  7.     
  8.     AddressClassifier       - base class for the black and white lists
  9.     DBDictAddressClassifier - persistent black/white list
  10.     ZODBAddressClassifier   - black/white list that uses ZODB for
  11.                               persistence
  12. '''
  13. import sys
  14. import types
  15. import shelve
  16. import ZODB
  17.  
  18. try:
  19.     from persistent import Persistent
  20. except ImportError:
  21.     from ZODB import Persistent
  22.  
  23. from BTrees.OOBTree import OOBTree
  24. from spambayes import dbmstorage
  25. from spambayes.classifier import Classifier, PICKLE_VERSION
  26. from spambayes.storage import STATE_KEY, DBDictClassifier, ZODBClassifier
  27. from spamexperts.Options import options
  28.  
  29. class AddressClassifier(Classifier):
  30.     
  31.     def spamprob(self, address, evidence = False):
  32.         '''Return best-guess probability that a message from address is
  33.         spam.
  34.  
  35.         The return value is a float in [0.0, 1.0].
  36.  
  37.         If optional arg evidence is True, the return value is a pair
  38.             probability, evidence
  39.         where evidence is a list of (word, probability) pairs.
  40.         '''
  41.         
  42.         try:
  43.             record = self._wordinfoget(address)
  44.         except UnicodeDecodeError:
  45.             record = None
  46.  
  47.         if record is None:
  48.             prob = options[('Classifier', 'unknown_word_prob')]
  49.         elif record.spamcount > record.hamcount:
  50.             prob = 1.0
  51.         else:
  52.             prob = 0.0
  53.         if evidence:
  54.             return (prob, [])
  55.         else:
  56.             return prob
  57.  
  58.     
  59.     def learn(self, address, is_spam):
  60.         """Teach the classifier by example.
  61.  
  62.         If is_spam is True, you're telling the classifier that messages
  63.         from this address are definitely spam, else that they are
  64.         definitely not spam.
  65.         """
  66.         if not isinstance(address, types.UnicodeType):
  67.             address = unicode(address, 'latin-1')
  68.         
  69.         self._add_msg((address,), is_spam)
  70.  
  71.     
  72.     def unlearn(self, address, is_spam):
  73.         '''In case of pilot error, call unlearn ASAP after screwing up.
  74.  
  75.         Pass the same arguments you passed to learn().
  76.         '''
  77.         if not isinstance(address, types.UnicodeType):
  78.             address = unicode(address, 'latin-1')
  79.         
  80.         self._remove_msg((address,), is_spam)
  81.  
  82.     
  83.     def forget(self, address):
  84.         '''Forget about this address completely.'''
  85.         if address in self._wordinfokeys():
  86.             self._wordinfodel(address)
  87.         
  88.  
  89.     
  90.     def keys(self, is_spam = None):
  91.         keys = self._wordinfokeys()
  92.         return keys
  93.  
  94.  
  95.  
  96. class DBDictAddressClassifier(AddressClassifier, DBDictClassifier):
  97.     '''AddressClassifier object persisted in a caching database.'''
  98.     pass
  99.  
  100.  
  101. class _PersistentAddressClassifier(AddressClassifier, Persistent):
  102.     
  103.     def __init__(self):
  104.         AddressClassifier.__init__(self)
  105.         self.wordinfo = OOBTree()
  106.  
  107.  
  108.  
  109. class ZODBAddressClassifier(ZODBClassifier):
  110.     ClassifierClass = _PersistentAddressClassifier
  111.  
  112.